package kr.totalcall.controls.dataGridClasses
{
	import flash.events.Event;
	import flash.net.SharedObject;
	
	import mx.controls.DataGrid;
	import mx.events.FlexEvent;

	/**
	 * 작업 기록
	 * 2012. 11. 2. / 이규광 / 최초 작성.
	 */
	/**
	 * DataGrid 관련 util
	 * @productversion Flex 4.5
	 * @langversion ActionScript 3.0
	 * @playerversion Flash 10.2
	 * @author 이규광.
	 */
	public class DataGridUtil
	{
		/**
		 * 생성자
		 */
		public function DataGridUtil()
		{
		}
		
		
		/**
		 * size 와 index를 기존에 저장되어있던 값으로 바꿈..
		 */
		public static function initDgSavedColumns(dg:DataGrid):void{
			var sharedObj:SharedObject = SharedObject.getLocal(dg.id + "_savedDgColumns");
			
			if(sharedObj && sharedObj.data && sharedObj.data.dgCols){
				
				var newCols:Array = [];
				var savedCols:Array = sharedObj.data.dgCols;
				
				for(var i:int=0; i < savedCols.length; i++){
					
					for ( var j:int=0; j < dg.columns.length; j++){
						if(dg.columns[j].dataField == savedCols[i].dataField
							&& dg.columns[j].headerText == savedCols[i].headerText){
							
							var w:Number = 0;
							if(savedCols[i].width.toString() == "" || isNaN(Number(savedCols[i].width))){
								w = 70;
							}else{
								w = Number(savedCols[i].width);
							}
							dg.columns[j].width = w;
							newCols.push(dg.columns[j]);
						}
					}
				}
				
				if(newCols.length == dg.columns.length){
					dg.columns = newCols;
				}
			}
			
			//dg.addEventListener(FlexEvent.UPDATE_COMPLETE, saveDgColumns);
		}
		
		
		
		/**
		 * update event로 dg컬럼을 shared object에 저장한다.
		 */
		public static function saveDgColumnsByEvent(event:Event):void{
			var dg:DataGrid = event.target as DataGrid;
			saveDgColumns(dg);
		}
		
		
		
		/**
		 * dg컬럼을 shared object에 저장한다.
		 */
		public static function saveDgColumns(dg:DataGrid):void{
			var cols:Array = dg.columns;
			var sharedObj:SharedObject = SharedObject.getLocal(dg.id+"_savedDgColumns");
			sharedObj.data.dgCols = cols;
			sharedObj.flush();
			trace("sharedObj saved dg");
		}
		
		
		
		/**
		 * 해당 Array로 datagrid column들의 사이즈, index를 수정한다.
		 */
		public static function resetDgColumns(resetColumns:Array, dg:DataGrid):void{
			//dg.removeEventListener(FlexEvent.UPDATE_COMPLETE, saveDgColumns);
			
			var newCols:Array = [];
			
			for(var i:int=0; i < resetColumns.length; i++){
				
				for ( var j:int=0; j < dg.columns.length; j++){
					if(dg.columns[j].dataField == resetColumns[i].dataField
						&& dg.columns[j].headerText == resetColumns[i].headerText){
						
						var w:Number = 0;
						if(resetColumns[i].width.toString() == "" || isNaN(Number(resetColumns[i].width))){
							w = 70;
						}else{
							w = Number(resetColumns[i].width);
						}
						dg.columns[j].width = w;
						newCols.push(dg.columns[j]);
						//trace(j + " -> " + i + " dg.columns[j].dataField "+dg.columns[j].dataField);
					}
				}
			}
			
			if(newCols.length == dg.columns.length){
				dg.columns = newCols;
			}
			dg.invalidateDisplayList();
			dg.invalidateList();
			
			//dg.addEventListener(FlexEvent.UPDATE_COMPLETE, saveDgColumns);
			saveDgColumns(dg);
		}
		
		
		
		/*****************************************************************************
		 *  업무관련
		 *****************************************************************************/
		
		/**
		 * string으로 된 column sorting을 num형식으로 소팅한다.
		 * 기사번호
		 */
		public static function drieverNumSortFunc(itemA:Object, itemB:Object):int {
			var num1:Number = Number(itemA.driver_num.toString().replace(/,/g, ""));
			var num2:Number = Number(itemB.driver_num.toString().replace(/,/g, ""));
			return numCompare(num1, num2);
		}
		
		
		/**
		 * string으로 된 column sorting을 num형식으로 소팅한다.
		 * 탁송
		 */
		public static function consignFormatSortFunc(itemA:Object, itemB:Object):int {
			var num1:Number = Number(itemA.consign_format.toString().replace(/,/g, ""));
			var num2:Number = Number(itemB.consign_format.toString().replace(/,/g, ""));
			return numCompare(num1, num2);
		}
		
		
		/**
		 * string으로 된 column sorting을 num형식으로 소팅한다.
		 * 요금
		 */
		public static function fareFormatSortFunc(itemA:Object, itemB:Object):int {
			var num1:Number = Number(itemA.fare_format.toString().replace(/,/g, ""));
			var num2:Number = Number(itemB.fare_format.toString().replace(/,/g, ""));
			return numCompare(num1, num2);
		}
		
		
		/**
		 * number 비교해서 sort할 수 있도록 int를 반환한다.
		 */
		public static function numCompare(num1:Number, num2:Number):int{
			if (num1 > num2 ) {
				return -1;
			} else if (num1 < num2 ) {
				return 1;
			} else {
				return 0;
			}
		}
	}
}